home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / protocols / tests / doctest.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  44KB  |  1,350 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4.  
  5. try:
  6.     basestring
  7. except NameError:
  8.     basestring = (str, unicode)
  9.  
  10.  
  11. try:
  12.     enumerate
  13. except NameError:
  14.     
  15.     def enumerate(seq):
  16.         return zip(range(len(seq)), seq)
  17.  
  18.  
  19. __docformat__ = 'reStructuredText en'
  20. __all__ = [
  21.     'register_optionflag',
  22.     'DONT_ACCEPT_TRUE_FOR_1',
  23.     'DONT_ACCEPT_BLANKLINE',
  24.     'NORMALIZE_WHITESPACE',
  25.     'ELLIPSIS',
  26.     'IGNORE_EXCEPTION_DETAIL',
  27.     'COMPARISON_FLAGS',
  28.     'REPORT_UDIFF',
  29.     'REPORT_CDIFF',
  30.     'REPORT_NDIFF',
  31.     'REPORT_ONLY_FIRST_FAILURE',
  32.     'REPORTING_FLAGS',
  33.     'is_private',
  34.     'Example',
  35.     'DocTest',
  36.     'DocTestParser',
  37.     'DocTestFinder',
  38.     'DocTestRunner',
  39.     'OutputChecker',
  40.     'DocTestFailure',
  41.     'UnexpectedException',
  42.     'DebugRunner',
  43.     'testmod',
  44.     'testfile',
  45.     'run_docstring_examples',
  46.     'Tester',
  47.     'DocTestSuite',
  48.     'DocFileSuite',
  49.     'set_unittest_reportflags',
  50.     'script_from_examples',
  51.     'testsource',
  52.     'debug_src',
  53.     'debug']
  54. import __future__
  55. import sys
  56. import traceback
  57. import inspect
  58. import linecache
  59. import os
  60. import re
  61. import types
  62. import unittest
  63. import difflib
  64. import pdb
  65. import tempfile
  66. import warnings
  67. from StringIO import StringIO
  68. warnings.filterwarnings('ignore', 'is_private', DeprecationWarning, __name__, 0)
  69. OPTIONFLAGS_BY_NAME = { }
  70.  
  71. def register_optionflag(name):
  72.     flag = 1 << len(OPTIONFLAGS_BY_NAME)
  73.     OPTIONFLAGS_BY_NAME[name] = flag
  74.     return flag
  75.  
  76. DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
  77. DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
  78. NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
  79. ELLIPSIS = register_optionflag('ELLIPSIS')
  80. IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
  81. COMPARISON_FLAGS = DONT_ACCEPT_TRUE_FOR_1 | DONT_ACCEPT_BLANKLINE | NORMALIZE_WHITESPACE | ELLIPSIS | IGNORE_EXCEPTION_DETAIL
  82. REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
  83. REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
  84. REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
  85. REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
  86. REPORTING_FLAGS = REPORT_UDIFF | REPORT_CDIFF | REPORT_NDIFF | REPORT_ONLY_FIRST_FAILURE
  87. BLANKLINE_MARKER = '<BLANKLINE>'
  88. ELLIPSIS_MARKER = '...'
  89.  
  90. def is_private(prefix, base):
  91.     warnings.warn("is_private is deprecated; it wasn't useful; examine DocTestFinder.find() lists instead", DeprecationWarning, stacklevel = 2)
  92.     if base[:1] == '_':
  93.         pass
  94.     return not None if '__' == '__' else '__' == base[-2:]
  95.  
  96.  
  97. def _extract_future_flags(globs):
  98.     flags = 0
  99.     for fname in __future__.all_feature_names:
  100.         feature = globs.get(fname, None)
  101.         if feature is getattr(__future__, fname):
  102.             flags |= feature.compiler_flag
  103.             continue
  104.     
  105.     return flags
  106.  
  107.  
  108. def _normalize_module(module, depth = 2):
  109.     if inspect.ismodule(module):
  110.         return module
  111.     elif isinstance(module, (str, unicode)):
  112.         return __import__(module, globals(), locals(), [
  113.             '*'])
  114.     elif module is None:
  115.         return sys.modules[sys._getframe(depth).f_globals['__name__']]
  116.     else:
  117.         raise TypeError('Expected a module, string, or None')
  118.  
  119.  
  120. def _indent(s, indent = 4):
  121.     return re.sub('(?m)^(?!$)', indent * ' ', s)
  122.  
  123.  
  124. def _exception_traceback(exc_info):
  125.     excout = StringIO()
  126.     (exc_type, exc_val, exc_tb) = exc_info
  127.     traceback.print_exception(exc_type, exc_val, exc_tb, file = excout)
  128.     return excout.getvalue()
  129.  
  130.  
  131. class _SpoofOut(StringIO):
  132.     
  133.     def getvalue(self):
  134.         result = StringIO.getvalue(self)
  135.         if result and not result.endswith('\n'):
  136.             result += '\n'
  137.         
  138.         if hasattr(self, 'softspace'):
  139.             del self.softspace
  140.         
  141.         return result
  142.  
  143.     
  144.     def truncate(self, size = None):
  145.         StringIO.truncate(self, size)
  146.         if hasattr(self, 'softspace'):
  147.             del self.softspace
  148.         
  149.  
  150.  
  151.  
  152. def _ellipsis_match(want, got):
  153.     if want.find(ELLIPSIS_MARKER) == -1:
  154.         return want == got
  155.     
  156.     ws = want.split(ELLIPSIS_MARKER)
  157.     startpos = 0
  158.     endpos = len(got)
  159.     w = ws[0]
  160.     if w:
  161.         if got.startswith(w):
  162.             startpos = len(w)
  163.             del ws[0]
  164.         else:
  165.             return False
  166.     
  167.     w = ws[-1]
  168.     if w:
  169.         if got.endswith(w):
  170.             endpos -= len(w)
  171.             del ws[-1]
  172.         else:
  173.             return False
  174.     
  175.     if startpos > endpos:
  176.         return False
  177.     
  178.     for w in ws:
  179.         startpos = got.find(w, startpos, endpos)
  180.         if startpos < 0:
  181.             return False
  182.         
  183.         startpos += len(w)
  184.     
  185.     return True
  186.  
  187.  
  188. def _comment_line(line):
  189.     line = line.rstrip()
  190.     if line:
  191.         return '# ' + line
  192.     else:
  193.         return '#'
  194.  
  195.  
  196. class _OutputRedirectingPdb(pdb.Pdb):
  197.     
  198.     def __init__(self, out):
  199.         self._OutputRedirectingPdb__out = out
  200.         pdb.Pdb.__init__(self)
  201.  
  202.     
  203.     def trace_dispatch(self, *args):
  204.         save_stdout = sys.stdout
  205.         sys.stdout = self._OutputRedirectingPdb__out
  206.         
  207.         try:
  208.             return pdb.Pdb.trace_dispatch(self, *args)
  209.         finally:
  210.             sys.stdout = save_stdout
  211.  
  212.  
  213.  
  214.  
  215. def _module_relative_path(module, path):
  216.     if not inspect.ismodule(module):
  217.         raise TypeError, 'Expected a module: %r' % module
  218.     
  219.     if path.startswith('/'):
  220.         raise ValueError, 'Module-relative files may not have absolute paths'
  221.     
  222.     if hasattr(module, '__file__'):
  223.         basedir = os.path.split(module.__file__)[0]
  224.     elif module.__name__ == '__main__':
  225.         if len(sys.argv) > 0 and sys.argv[0] != '':
  226.             basedir = os.path.split(sys.argv[0])[0]
  227.         else:
  228.             basedir = os.curdir
  229.     else:
  230.         raise ValueError("Can't resolve paths relative to the module " + module + ' (it has no __file__)')
  231.     return os.path.join(basedir, *path.split('/'))
  232.  
  233.  
  234. class Example:
  235.     
  236.     def __init__(self, source, want, exc_msg = None, lineno = 0, indent = 0, options = None):
  237.         if not source.endswith('\n'):
  238.             source += '\n'
  239.         
  240.         if want and not want.endswith('\n'):
  241.             want += '\n'
  242.         
  243.         if exc_msg is not None and not exc_msg.endswith('\n'):
  244.             exc_msg += '\n'
  245.         
  246.         self.source = source
  247.         self.want = want
  248.         self.lineno = lineno
  249.         self.indent = indent
  250.         if options is None:
  251.             options = { }
  252.         
  253.         self.options = options
  254.         self.exc_msg = exc_msg
  255.  
  256.  
  257.  
  258. class DocTest:
  259.     
  260.     def __init__(self, examples, globs, name, filename, lineno, docstring):
  261.         self.examples = examples
  262.         self.docstring = docstring
  263.         self.globs = globs.copy()
  264.         self.name = name
  265.         self.filename = filename
  266.         self.lineno = lineno
  267.  
  268.     
  269.     def __repr__(self):
  270.         if len(self.examples) == 0:
  271.             examples = 'no examples'
  272.         elif len(self.examples) == 1:
  273.             examples = '1 example'
  274.         else:
  275.             examples = '%d examples' % len(self.examples)
  276.         return '<DocTest %s from %s:%s (%s)>' % (self.name, self.filename, self.lineno, examples)
  277.  
  278.     
  279.     def __cmp__(self, other):
  280.         if not isinstance(other, DocTest):
  281.             return -1
  282.         
  283.         return cmp((self.name, self.filename, self.lineno, id(self)), (other.name, other.filename, other.lineno, id(other)))
  284.  
  285.  
  286.  
  287. class DocTestParser:
  288.     _EXAMPLE_RE = re.compile('\n        # Source consists of a PS1 line followed by zero or more PS2 lines.\n        (?P<source>\n            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line\n            (?:\\n           [ ]*  \\.\\.\\. .*)*)  # PS2 lines\n        \\n?\n        # Want consists of any non-blank lines that do not start with PS1.\n        (?P<want> (?:(?![ ]*$)    # Not a blank line\n                     (?![ ]*>>>)  # Not a line starting with PS1\n                     .*$\\n?       # But any other line\n                  )*)\n        ', re.MULTILINE | re.VERBOSE)
  289.     _EXCEPTION_RE = re.compile("\n        # Grab the traceback header.  Different versions of Python have\n        # said different things on the first traceback line.\n        ^(?P<hdr> Traceback\\ \\(\n            (?: most\\ recent\\ call\\ last\n            |   innermost\\ last\n            ) \\) :\n        )\n        \\s* $                # toss trailing whitespace on the header.\n        (?P<stack> .*?)      # don't blink: absorb stuff until...\n        ^ (?P<msg> \\w+ .*)   #     a line *starts* with alphanum.\n        ", re.VERBOSE | re.MULTILINE | re.DOTALL)
  290.     _IS_BLANK_OR_COMMENT = re.compile('^[ ]*(#.*)?$').match
  291.     
  292.     def parse(self, string, name = '<string>'):
  293.         string = string.expandtabs()
  294.         min_indent = self._min_indent(string)
  295.         output = []
  296.         (charno, lineno) = (0, 0)
  297.         for m in self._EXAMPLE_RE.finditer(string):
  298.             output.append(string[charno:m.start()])
  299.             lineno += string.count('\n', charno, m.start())
  300.             (source, options, want, exc_msg) = self._parse_example(m, name, lineno)
  301.             if not self._IS_BLANK_OR_COMMENT(source):
  302.                 output.append(Example(source, want, exc_msg, lineno = lineno, indent = min_indent + len(m.group('indent')), options = options))
  303.             
  304.             lineno += string.count('\n', m.start(), m.end())
  305.             charno = m.end()
  306.         
  307.         output.append(string[charno:])
  308.         return output
  309.  
  310.     
  311.     def get_doctest(self, string, globs, name, filename, lineno):
  312.         return DocTest(self.get_examples(string, name), globs, name, filename, lineno, string)
  313.  
  314.     
  315.     def get_examples(self, string, name = '<string>'):
  316.         return _[1]
  317.  
  318.     
  319.     def _parse_example(self, m, name, lineno):
  320.         indent = len(m.group('indent'))
  321.         source_lines = m.group('source').split('\n')
  322.         self._check_prompt_blank(source_lines, indent, name, lineno)
  323.         self._check_prefix(source_lines[1:], ' ' * indent + '.', name, lineno)
  324.         source = []([ sl[indent + 4:] for sl in source_lines ])
  325.         want = m.group('want')
  326.         want_lines = want.split('\n')
  327.         self._check_prefix(want_lines, ' ' * indent, name, lineno + len(source_lines))
  328.         want = []([ wl[indent:] for wl in want_lines ])
  329.         m = self._EXCEPTION_RE.match(want)
  330.         options = self._find_options(source, name, lineno)
  331.         return (source, options, want, exc_msg)
  332.  
  333.     _OPTION_DIRECTIVE_RE = re.compile('#\\s*doctest:\\s*([^\\n\\\'"]*)$', re.MULTILINE)
  334.     
  335.     def _find_options(self, source, name, lineno):
  336.         options = { }
  337.         for m in self._OPTION_DIRECTIVE_RE.finditer(source):
  338.             option_strings = m.group(1).replace(',', ' ').split()
  339.             for option in option_strings:
  340.                 if option[0] not in '+-' or option[1:] not in OPTIONFLAGS_BY_NAME:
  341.                     raise ValueError('line %r of the doctest for %s has an invalid option: %r' % (lineno + 1, name, option))
  342.                 
  343.                 flag = OPTIONFLAGS_BY_NAME[option[1:]]
  344.                 options[flag] = option[0] == '+'
  345.             
  346.         
  347.         if options and self._IS_BLANK_OR_COMMENT(source):
  348.             raise ValueError('line %r of the doctest for %s has an option directive on a line with no example: %r' % (lineno, name, source))
  349.         
  350.         return options
  351.  
  352.     _INDENT_RE = re.compile('^([ ]*)(?=\\S)', re.MULTILINE)
  353.     
  354.     def _min_indent(self, s):
  355.         indents = [ len(indent) for indent in self._INDENT_RE.findall(s) ]
  356.  
  357.     
  358.     def _check_prompt_blank(self, lines, indent, name, lineno):
  359.         for i, line in enumerate(lines):
  360.             if len(line) >= indent + 4 and line[indent + 3] != ' ':
  361.                 raise ValueError('line %r of the docstring for %s lacks blank after %s: %r' % (lineno + i + 1, name, line[indent:indent + 3], line))
  362.                 continue
  363.         
  364.  
  365.     
  366.     def _check_prefix(self, lines, prefix, name, lineno):
  367.         for i, line in enumerate(lines):
  368.             if line and not line.startswith(prefix):
  369.                 raise ValueError('line %r of the docstring for %s has inconsistent leading whitespace: %r' % (lineno + i + 1, name, line))
  370.                 continue
  371.         
  372.  
  373.  
  374.  
  375. class DocTestFinder:
  376.     
  377.     def __init__(self, verbose = False, parser = DocTestParser(), recurse = True, _namefilter = None, exclude_empty = True):
  378.         self._parser = parser
  379.         self._verbose = verbose
  380.         self._recurse = recurse
  381.         self._exclude_empty = exclude_empty
  382.         self._namefilter = _namefilter
  383.  
  384.     
  385.     def find(self, obj, name = None, module = None, globs = None, extraglobs = None):
  386.         if name is None:
  387.             name = getattr(obj, '__name__', None)
  388.             if name is None:
  389.                 raise ValueError("DocTestFinder.find: name must be given when obj.__name__ doesn't exist: %r" % (type(obj),))
  390.             
  391.         
  392.         if module is False:
  393.             module = None
  394.         elif module is None:
  395.             module = inspect.getmodule(obj)
  396.         
  397.         
  398.         try:
  399.             if not inspect.getsourcefile(obj):
  400.                 pass
  401.             file = inspect.getfile(obj)
  402.             source_lines = linecache.getlines(file)
  403.             if not source_lines:
  404.                 source_lines = None
  405.         except TypeError:
  406.             source_lines = None
  407.  
  408.         if globs is None:
  409.             if module is None:
  410.                 globs = { }
  411.             else:
  412.                 globs = module.__dict__.copy()
  413.         else:
  414.             globs = globs.copy()
  415.         if extraglobs is not None:
  416.             globs.update(extraglobs)
  417.         
  418.         tests = []
  419.         self._find(tests, obj, name, module, source_lines, globs, { })
  420.         return tests
  421.  
  422.     
  423.     def _filter(self, obj, prefix, base):
  424.         if self._namefilter is not None:
  425.             pass
  426.         return self._namefilter(prefix, base)
  427.  
  428.     
  429.     def _from_module(self, module, object):
  430.         if module is None:
  431.             return True
  432.         elif inspect.isfunction(object):
  433.             return module.__dict__ is object.func_globals
  434.         elif inspect.isclass(object):
  435.             return module.__name__ == object.__module__
  436.         elif inspect.getmodule(object) is not None:
  437.             return module is inspect.getmodule(object)
  438.         elif hasattr(object, '__module__'):
  439.             return module.__name__ == object.__module__
  440.         elif isinstance(object, property):
  441.             return True
  442.         else:
  443.             raise ValueError('object must be a class or function')
  444.  
  445.     
  446.     def _find(self, tests, obj, name, module, source_lines, globs, seen):
  447.         if self._verbose:
  448.             print 'Finding tests in %s' % name
  449.         
  450.         if id(obj) in seen:
  451.             return None
  452.         
  453.         seen[id(obj)] = 1
  454.         test = self._get_test(obj, name, module, globs, source_lines)
  455.         if test is not None:
  456.             tests.append(test)
  457.         
  458.         if inspect.ismodule(obj) and self._recurse:
  459.             for valname, val in obj.__dict__.items():
  460.                 if self._filter(val, name, valname):
  461.                     continue
  462.                 
  463.                 valname = '%s.%s' % (name, valname)
  464.                 if (inspect.isfunction(val) or inspect.isclass(val)) and self._from_module(module, val):
  465.                     self._find(tests, val, valname, module, source_lines, globs, seen)
  466.                     continue
  467.             
  468.         
  469.         if inspect.ismodule(obj) and self._recurse:
  470.             for valname, val in getattr(obj, '__test__', { }).items():
  471.                 if not isinstance(valname, basestring):
  472.                     raise ValueError('DocTestFinder.find: __test__ keys must be strings: %r' % (type(valname),))
  473.                 
  474.                 if not inspect.isfunction(val) and inspect.isclass(val) and inspect.ismethod(val) and inspect.ismodule(val) or isinstance(val, basestring):
  475.                     raise ValueError('DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: %r' % (type(val),))
  476.                 
  477.                 valname = '%s.__test__.%s' % (name, valname)
  478.                 self._find(tests, val, valname, module, source_lines, globs, seen)
  479.             
  480.         
  481.         if inspect.isclass(obj) and self._recurse:
  482.             for valname, val in obj.__dict__.items():
  483.                 if self._filter(val, name, valname):
  484.                     continue
  485.                 
  486.                 if isinstance(val, staticmethod):
  487.                     val = getattr(obj, valname)
  488.                 
  489.                 if isinstance(val, classmethod):
  490.                     val = getattr(obj, valname).im_func
  491.                 
  492.                 if (inspect.isfunction(val) and inspect.isclass(val) or isinstance(val, property)) and self._from_module(module, val):
  493.                     valname = '%s.%s' % (name, valname)
  494.                     self._find(tests, val, valname, module, source_lines, globs, seen)
  495.                     continue
  496.             
  497.         
  498.  
  499.     
  500.     def _get_test(self, obj, name, module, globs, source_lines):
  501.         if isinstance(obj, basestring):
  502.             docstring = obj
  503.         else:
  504.             
  505.             try:
  506.                 if obj.__doc__ is None:
  507.                     docstring = ''
  508.                 else:
  509.                     docstring = obj.__doc__
  510.                     if not isinstance(docstring, basestring):
  511.                         docstring = str(docstring)
  512.             except (TypeError, AttributeError):
  513.                 docstring = ''
  514.             
  515.  
  516.         lineno = self._find_lineno(obj, source_lines)
  517.         if self._exclude_empty and not docstring:
  518.             return None
  519.         
  520.         if module is None:
  521.             filename = None
  522.         else:
  523.             filename = getattr(module, '__file__', module.__name__)
  524.             if filename[-4:] in ('.pyc', '.pyo'):
  525.                 filename = filename[:-1]
  526.             
  527.         return self._parser.get_doctest(docstring, globs, name, filename, lineno)
  528.  
  529.     
  530.     def _find_lineno(self, obj, source_lines):
  531.         lineno = None
  532.         if inspect.ismodule(obj):
  533.             lineno = 0
  534.         
  535.         if inspect.isclass(obj):
  536.             if source_lines is None:
  537.                 return None
  538.             
  539.             pat = re.compile('^\\s*class\\s*%s\\b' % getattr(obj, '__name__', '-'))
  540.             for i, line in enumerate(source_lines):
  541.                 if pat.match(line):
  542.                     lineno = i
  543.                     break
  544.                     continue
  545.             
  546.         
  547.         if inspect.ismethod(obj):
  548.             obj = obj.im_func
  549.         
  550.         if inspect.isfunction(obj):
  551.             obj = obj.func_code
  552.         
  553.         if inspect.istraceback(obj):
  554.             obj = obj.tb_frame
  555.         
  556.         if inspect.isframe(obj):
  557.             obj = obj.f_code
  558.         
  559.         if inspect.iscode(obj):
  560.             lineno = getattr(obj, 'co_firstlineno', None) - 1
  561.         
  562.         if lineno is not None:
  563.             if source_lines is None:
  564.                 return lineno + 1
  565.             
  566.             pat = re.compile('(^|.*:)\\s*\\w*("|\')')
  567.             for lineno in range(lineno, len(source_lines)):
  568.                 if pat.match(source_lines[lineno]):
  569.                     return lineno
  570.                     continue
  571.             
  572.         
  573.  
  574.  
  575.  
  576. class DocTestRunner:
  577.     DIVIDER = '*' * 70
  578.     
  579.     def __init__(self, checker = None, verbose = None, optionflags = 0):
  580.         if not checker:
  581.             pass
  582.         self._checker = OutputChecker()
  583.         if verbose is None:
  584.             verbose = '-v' in sys.argv
  585.         
  586.         self._verbose = verbose
  587.         self.optionflags = optionflags
  588.         self.original_optionflags = optionflags
  589.         self.tries = 0
  590.         self.failures = 0
  591.         self._name2ft = { }
  592.         self._fakeout = _SpoofOut()
  593.  
  594.     
  595.     def report_start(self, out, test, example):
  596.         if self._verbose:
  597.             if example.want:
  598.                 out('Trying:\n' + _indent(example.source) + 'Expecting:\n' + _indent(example.want))
  599.             else:
  600.                 out('Trying:\n' + _indent(example.source) + 'Expecting nothing\n')
  601.         
  602.  
  603.     
  604.     def report_success(self, out, test, example, got):
  605.         if self._verbose:
  606.             out('ok\n')
  607.         
  608.  
  609.     
  610.     def report_failure(self, out, test, example, got):
  611.         out(self._failure_header(test, example) + self._checker.output_difference(example, got, self.optionflags))
  612.  
  613.     
  614.     def report_unexpected_exception(self, out, test, example, exc_info):
  615.         out(self._failure_header(test, example) + 'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
  616.  
  617.     
  618.     def _failure_header(self, test, example):
  619.         out = [
  620.             self.DIVIDER]
  621.         if test.filename:
  622.             if test.lineno is not None and example.lineno is not None:
  623.                 lineno = test.lineno + example.lineno + 1
  624.             else:
  625.                 lineno = '?'
  626.             out.append('File "%s", line %s, in %s' % (test.filename, lineno, test.name))
  627.         else:
  628.             out.append('Line %s, in %s' % (example.lineno + 1, test.name))
  629.         out.append('Failed example:')
  630.         source = example.source
  631.         out.append(_indent(source))
  632.         return '\n'.join(out)
  633.  
  634.     
  635.     def __run(self, test, compileflags, out):
  636.         failures = tries = 0
  637.         original_optionflags = self.optionflags
  638.         (SUCCESS, FAILURE, BOOM) = range(3)
  639.         check = self._checker.check_output
  640.         for examplenum, example in enumerate(test.examples):
  641.             if self.optionflags & REPORT_ONLY_FIRST_FAILURE:
  642.                 pass
  643.             quiet = failures > 0
  644.             self.optionflags = original_optionflags
  645.             if example.options:
  646.                 for optionflag, val in example.options.items():
  647.                     if val:
  648.                         self.optionflags |= optionflag
  649.                         continue
  650.                     self
  651.                     self.optionflags &= ~optionflag
  652.                 
  653.             
  654.             tries += 1
  655.             if not quiet:
  656.                 self.report_start(out, test, example)
  657.             
  658.             filename = '<doctest %s[%d]>' % (test.name, examplenum)
  659.             
  660.             try:
  661.                 exec compile(example.source, filename, 'single', compileflags, 1) in test.globs
  662.                 self.debugger.set_continue()
  663.                 exception = None
  664.             except KeyboardInterrupt:
  665.                 raise 
  666.             except:
  667.                 exception = sys.exc_info()
  668.                 self.debugger.set_continue()
  669.  
  670.             got = self._fakeout.getvalue()
  671.             self._fakeout.truncate(0)
  672.             outcome = FAILURE
  673.             if exception is None:
  674.                 if check(example.want, got, self.optionflags):
  675.                     outcome = SUCCESS
  676.                 
  677.             else:
  678.                 exc_info = sys.exc_info()
  679.                 exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
  680.                 if not quiet:
  681.                     got += _exception_traceback(exc_info)
  682.                 
  683.                 if example.exc_msg is None:
  684.                     outcome = BOOM
  685.                 elif check(example.exc_msg, exc_msg, self.optionflags):
  686.                     outcome = SUCCESS
  687.                 elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
  688.                     m1 = re.match('[^:]*:', example.exc_msg)
  689.                     m2 = re.match('[^:]*:', exc_msg)
  690.                     if m1 and m2 and check(m1.group(0), m2.group(0), self.optionflags):
  691.                         outcome = SUCCESS
  692.                     
  693.                 
  694.             if outcome is SUCCESS:
  695.                 if not quiet:
  696.                     self.report_success(out, test, example, got)
  697.                 
  698.             quiet
  699.             if outcome is FAILURE:
  700.                 if not quiet:
  701.                     self.report_failure(out, test, example, got)
  702.                 
  703.                 failures += 1
  704.                 continue
  705.             if outcome is BOOM:
  706.                 if not quiet:
  707.                     self.report_unexpected_exception(out, test, example, exc_info)
  708.                 
  709.                 failures += 1
  710.                 continue
  711.         
  712.         self.optionflags = original_optionflags
  713.         self._DocTestRunner__record_outcome(test, failures, tries)
  714.         return (failures, tries)
  715.  
  716.     
  717.     def __record_outcome(self, test, f, t):
  718.         (f2, t2) = self._name2ft.get(test.name, (0, 0))
  719.         self._name2ft[test.name] = (f + f2, t + t2)
  720.         self.failures += f
  721.         self.tries += t
  722.  
  723.     __LINECACHE_FILENAME_RE = re.compile('<doctest (?P<name>[\\w\\.]+)\\[(?P<examplenum>\\d+)\\]>$')
  724.     
  725.     def __patched_linecache_getlines(self, filename, module_globals = None):
  726.         m = self._DocTestRunner__LINECACHE_FILENAME_RE.match(filename)
  727.         if m and m.group('name') == self.test.name:
  728.             example = self.test.examples[int(m.group('examplenum'))]
  729.             return example.source.splitlines(True)
  730.         elif self.save_linecache_getlines.func_code.co_argcount > 1:
  731.             return self.save_linecache_getlines(filename, module_globals)
  732.         else:
  733.             return self.save_linecache_getlines(filename)
  734.  
  735.     
  736.     def run(self, test, compileflags = None, out = None, clear_globs = True):
  737.         self.test = test
  738.         if compileflags is None:
  739.             compileflags = _extract_future_flags(test.globs)
  740.         
  741.         save_stdout = sys.stdout
  742.         if out is None:
  743.             out = save_stdout.write
  744.         
  745.         sys.stdout = self._fakeout
  746.         save_set_trace = pdb.set_trace
  747.         self.debugger = _OutputRedirectingPdb(save_stdout)
  748.         self.debugger.reset()
  749.         pdb.set_trace = self.debugger.set_trace
  750.         self.save_linecache_getlines = linecache.getlines
  751.         linecache.getlines = self._DocTestRunner__patched_linecache_getlines
  752.         
  753.         try:
  754.             return self._DocTestRunner__run(test, compileflags, out)
  755.         finally:
  756.             sys.stdout = save_stdout
  757.             pdb.set_trace = save_set_trace
  758.             linecache.getlines = self.save_linecache_getlines
  759.             if clear_globs:
  760.                 test.globs.clear()
  761.             
  762.  
  763.  
  764.     
  765.     def summarize(self, verbose = None):
  766.         if verbose is None:
  767.             verbose = self._verbose
  768.         
  769.         notests = []
  770.         passed = []
  771.         failed = []
  772.         totalt = totalf = 0
  773.         for x in self._name2ft.items():
  774.             (f, t) = (name,)
  775.             totalt += t
  776.             totalf += f
  777.             if t == 0:
  778.                 notests.append(name)
  779.                 continue
  780.             x
  781.             if f == 0:
  782.                 passed.append((name, t))
  783.                 continue
  784.             failed.append(x)
  785.         
  786.         if verbose:
  787.             if notests:
  788.                 print len(notests), 'items had no tests:'
  789.                 notests.sort()
  790.                 for thing in notests:
  791.                     print '   ', thing
  792.                 
  793.             
  794.             if passed:
  795.                 print len(passed), 'items passed all tests:'
  796.                 passed.sort()
  797.                 for thing, count in passed:
  798.                     print ' %3d tests in %s' % (count, thing)
  799.                 
  800.             
  801.         
  802.         if failed:
  803.             print self.DIVIDER
  804.             print len(failed), 'items had failures:'
  805.             failed.sort()
  806.             for f, t in failed:
  807.                 print ' %3d of %3d in %s' % (f, t, thing)
  808.             
  809.         
  810.         if verbose:
  811.             print totalt, 'tests in', len(self._name2ft), 'items.'
  812.             print totalt - totalf, 'passed and', totalf, 'failed.'
  813.         
  814.         if totalf:
  815.             print '***Test Failed***', totalf, 'failures.'
  816.         elif verbose:
  817.             print 'Test passed.'
  818.         
  819.         return (totalf, totalt)
  820.  
  821.     
  822.     def merge(self, other):
  823.         d = self._name2ft
  824.         for f, t in other._name2ft.items():
  825.             d[name] = (f, t)
  826.         
  827.  
  828.  
  829.  
  830. class OutputChecker:
  831.     
  832.     def check_output(self, want, got, optionflags):
  833.         if got == want:
  834.             return True
  835.         
  836.         if not optionflags & DONT_ACCEPT_TRUE_FOR_1:
  837.             if (got, want) == ('True\n', '1\n'):
  838.                 return True
  839.             
  840.             if (got, want) == ('False\n', '0\n'):
  841.                 return True
  842.             
  843.         
  844.         if not optionflags & DONT_ACCEPT_BLANKLINE:
  845.             want = re.sub('(?m)^%s\\s*?$' % re.escape(BLANKLINE_MARKER), '', want)
  846.             got = re.sub('(?m)^\\s*?$', '', got)
  847.             if got == want:
  848.                 return True
  849.             
  850.         
  851.         if optionflags & NORMALIZE_WHITESPACE:
  852.             got = ' '.join(got.split())
  853.             want = ' '.join(want.split())
  854.             if got == want:
  855.                 return True
  856.             
  857.         
  858.         if optionflags & ELLIPSIS:
  859.             if _ellipsis_match(want, got):
  860.                 return True
  861.             
  862.         
  863.         return False
  864.  
  865.     
  866.     def _do_a_fancy_diff(self, want, got, optionflags):
  867.         if not optionflags & (REPORT_UDIFF | REPORT_CDIFF | REPORT_NDIFF):
  868.             return False
  869.         
  870.         if optionflags & REPORT_NDIFF:
  871.             return True
  872.         
  873.         if want.count('\n') > 2:
  874.             pass
  875.         return got.count('\n') > 2
  876.  
  877.     
  878.     def output_difference(self, example, got, optionflags):
  879.         want = example.want
  880.         if not optionflags & DONT_ACCEPT_BLANKLINE:
  881.             got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
  882.         
  883.         if want and got:
  884.             return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
  885.         elif want:
  886.             return 'Expected:\n%sGot nothing\n' % _indent(want)
  887.         elif got:
  888.             return 'Expected nothing\nGot:\n%s' % _indent(got)
  889.         else:
  890.             return 'Expected nothing\nGot nothing\n'
  891.  
  892.  
  893.  
  894. class DocTestFailure(Exception):
  895.     
  896.     def __init__(self, test, example, got):
  897.         self.test = test
  898.         self.example = example
  899.         self.got = got
  900.  
  901.     
  902.     def __str__(self):
  903.         return str(self.test)
  904.  
  905.  
  906.  
  907. class UnexpectedException(Exception):
  908.     
  909.     def __init__(self, test, example, exc_info):
  910.         self.test = test
  911.         self.example = example
  912.         self.exc_info = exc_info
  913.  
  914.     
  915.     def __str__(self):
  916.         return str(self.test)
  917.  
  918.  
  919.  
  920. class DebugRunner(DocTestRunner):
  921.     
  922.     def run(self, test, compileflags = None, out = None, clear_globs = True):
  923.         r = DocTestRunner.run(self, test, compileflags, out, False)
  924.         if clear_globs:
  925.             test.globs.clear()
  926.         
  927.         return r
  928.  
  929.     
  930.     def report_unexpected_exception(self, out, test, example, exc_info):
  931.         raise UnexpectedException(test, example, exc_info)
  932.  
  933.     
  934.     def report_failure(self, out, test, example, got):
  935.         raise DocTestFailure(test, example, got)
  936.  
  937.  
  938. master = None
  939.  
  940. def testmod(m = None, name = None, globs = None, verbose = None, isprivate = None, report = True, optionflags = 0, extraglobs = None, raise_on_error = False, exclude_empty = False):
  941.     global master
  942.     if isprivate is not None:
  943.         warnings.warn('the isprivate argument is deprecated; examine DocTestFinder.find() lists instead', DeprecationWarning)
  944.     
  945.     if m is None:
  946.         m = sys.modules.get('__main__')
  947.     
  948.     if not inspect.ismodule(m):
  949.         raise TypeError('testmod: module required; %r' % (m,))
  950.     
  951.     if name is None:
  952.         name = m.__name__
  953.     
  954.     finder = DocTestFinder(_namefilter = isprivate, exclude_empty = exclude_empty)
  955.     if raise_on_error:
  956.         runner = DebugRunner(verbose = verbose, optionflags = optionflags)
  957.     else:
  958.         runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  959.     for test in finder.find(m, name, globs = globs, extraglobs = extraglobs):
  960.         runner.run(test)
  961.     
  962.     if report:
  963.         runner.summarize()
  964.     
  965.     if master is None:
  966.         master = runner
  967.     else:
  968.         master.merge(runner)
  969.     return (runner.failures, runner.tries)
  970.  
  971.  
  972. def testfile(filename, module_relative = True, name = None, package = None, globs = None, verbose = None, report = True, optionflags = 0, extraglobs = None, raise_on_error = False, parser = DocTestParser()):
  973.     global master
  974.     if package and not module_relative:
  975.         raise ValueError('Package may only be specified for module-relative paths.')
  976.     
  977.     if module_relative:
  978.         package = _normalize_module(package)
  979.         filename = _module_relative_path(package, filename)
  980.     
  981.     if name is None:
  982.         name = os.path.basename(filename)
  983.     
  984.     if globs is None:
  985.         globs = { }
  986.     else:
  987.         globs = globs.copy()
  988.     if extraglobs is not None:
  989.         globs.update(extraglobs)
  990.     
  991.     if raise_on_error:
  992.         runner = DebugRunner(verbose = verbose, optionflags = optionflags)
  993.     else:
  994.         runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  995.     s = open(filename).read()
  996.     test = parser.get_doctest(s, globs, name, filename, 0)
  997.     runner.run(test)
  998.     if report:
  999.         runner.summarize()
  1000.     
  1001.     if master is None:
  1002.         master = runner
  1003.     else:
  1004.         master.merge(runner)
  1005.     return (runner.failures, runner.tries)
  1006.  
  1007.  
  1008. def run_docstring_examples(f, globs, verbose = False, name = 'NoName', compileflags = None, optionflags = 0):
  1009.     finder = DocTestFinder(verbose = verbose, recurse = False)
  1010.     runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  1011.     for test in finder.find(f, name, globs = globs):
  1012.         runner.run(test, compileflags = compileflags)
  1013.     
  1014.  
  1015.  
  1016. class Tester:
  1017.     
  1018.     def __init__(self, mod = None, globs = None, verbose = None, isprivate = None, optionflags = 0):
  1019.         warnings.warn('class Tester is deprecated; use class doctest.DocTestRunner instead', DeprecationWarning, stacklevel = 2)
  1020.         if mod is None and globs is None:
  1021.             raise TypeError('Tester.__init__: must specify mod or globs')
  1022.         
  1023.         if mod is not None and not inspect.ismodule(mod):
  1024.             raise TypeError('Tester.__init__: mod must be a module; %r' % (mod,))
  1025.         
  1026.         if globs is None:
  1027.             globs = mod.__dict__
  1028.         
  1029.         self.globs = globs
  1030.         self.verbose = verbose
  1031.         self.isprivate = isprivate
  1032.         self.optionflags = optionflags
  1033.         self.testfinder = DocTestFinder(_namefilter = isprivate)
  1034.         self.testrunner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  1035.  
  1036.     
  1037.     def runstring(self, s, name):
  1038.         test = DocTestParser().get_doctest(s, self.globs, name, None, None)
  1039.         if self.verbose:
  1040.             print 'Running string', name
  1041.         
  1042.         (f, t) = self.testrunner.run(test)
  1043.         if self.verbose:
  1044.             print f, 'of', t, 'examples failed in string', name
  1045.         
  1046.         return (f, t)
  1047.  
  1048.     
  1049.     def rundoc(self, object, name = None, module = None):
  1050.         f = t = 0
  1051.         tests = self.testfinder.find(object, name, module = module, globs = self.globs)
  1052.         for test in tests:
  1053.             (f2, t2) = self.testrunner.run(test)
  1054.             f = f + f2
  1055.             t = t + t2
  1056.         
  1057.         return (f, t)
  1058.  
  1059.     
  1060.     def rundict(self, d, name, module = None):
  1061.         import new as new
  1062.         m = new.module(name)
  1063.         m.__dict__.update(d)
  1064.         if module is None:
  1065.             module = False
  1066.         
  1067.         return self.rundoc(m, name, module)
  1068.  
  1069.     
  1070.     def run__test__(self, d, name):
  1071.         import new
  1072.         m = new.module(name)
  1073.         m.__test__ = d
  1074.         return self.rundoc(m, name)
  1075.  
  1076.     
  1077.     def summarize(self, verbose = None):
  1078.         return self.testrunner.summarize(verbose)
  1079.  
  1080.     
  1081.     def merge(self, other):
  1082.         self.testrunner.merge(other.testrunner)
  1083.  
  1084.  
  1085. _unittest_reportflags = 0
  1086.  
  1087. def set_unittest_reportflags(flags):
  1088.     global _unittest_reportflags
  1089.     if flags & REPORTING_FLAGS != flags:
  1090.         raise ValueError('Only reporting flags allowed', flags)
  1091.     
  1092.     old = _unittest_reportflags
  1093.     _unittest_reportflags = flags
  1094.     return old
  1095.  
  1096.  
  1097. class DocTestCase(unittest.TestCase):
  1098.     
  1099.     def __init__(self, test, optionflags = 0, setUp = None, tearDown = None, checker = None):
  1100.         unittest.TestCase.__init__(self)
  1101.         self._dt_optionflags = optionflags
  1102.         self._dt_checker = checker
  1103.         self._dt_test = test
  1104.         self._dt_setUp = setUp
  1105.         self._dt_tearDown = tearDown
  1106.  
  1107.     
  1108.     def setUp(self):
  1109.         test = self._dt_test
  1110.         if self._dt_setUp is not None:
  1111.             self._dt_setUp(test)
  1112.         
  1113.  
  1114.     
  1115.     def tearDown(self):
  1116.         test = self._dt_test
  1117.         if self._dt_tearDown is not None:
  1118.             self._dt_tearDown(test)
  1119.         
  1120.         test.globs.clear()
  1121.  
  1122.     
  1123.     def runTest(self):
  1124.         test = self._dt_test
  1125.         old = sys.stdout
  1126.         new = StringIO()
  1127.         optionflags = self._dt_optionflags
  1128.         if not optionflags & REPORTING_FLAGS:
  1129.             optionflags |= _unittest_reportflags
  1130.         
  1131.         runner = DocTestRunner(optionflags = optionflags, checker = self._dt_checker, verbose = False)
  1132.         
  1133.         try:
  1134.             runner.DIVIDER = '-' * 70
  1135.             (failures, tries) = runner.run(test, out = new.write, clear_globs = False)
  1136.         finally:
  1137.             sys.stdout = old
  1138.  
  1139.         if failures:
  1140.             raise self.failureException(self.format_failure(new.getvalue()))
  1141.         
  1142.  
  1143.     
  1144.     def format_failure(self, err):
  1145.         test = self._dt_test
  1146.         if test.lineno is None:
  1147.             lineno = 'unknown line number'
  1148.         else:
  1149.             lineno = '%s' % test.lineno
  1150.         lname = '.'.join(test.name.split('.')[-1:])
  1151.         return 'Failed doctest test for %s\n  File "%s", line %s, in %s\n\n%s' % (test.name, test.filename, lineno, lname, err)
  1152.  
  1153.     
  1154.     def debug(self):
  1155.         self.setUp()
  1156.         runner = DebugRunner(optionflags = self._dt_optionflags, checker = self._dt_checker, verbose = False)
  1157.         runner.run(self._dt_test)
  1158.         self.tearDown()
  1159.  
  1160.     
  1161.     def id(self):
  1162.         return self._dt_test.name
  1163.  
  1164.     
  1165.     def __repr__(self):
  1166.         name = self._dt_test.name.split('.')
  1167.         return '%s (%s)' % (name[-1], '.'.join(name[:-1]))
  1168.  
  1169.     __str__ = __repr__
  1170.     
  1171.     def shortDescription(self):
  1172.         return 'Doctest: ' + self._dt_test.name
  1173.  
  1174.  
  1175.  
  1176. def DocTestSuite(module = None, globs = None, extraglobs = None, test_finder = None, **options):
  1177.     if test_finder is None:
  1178.         test_finder = DocTestFinder()
  1179.     
  1180.     module = _normalize_module(module)
  1181.     tests = test_finder.find(module, globs = globs, extraglobs = extraglobs)
  1182.     if globs is None:
  1183.         globs = module.__dict__
  1184.     
  1185.     if not tests:
  1186.         raise ValueError(module, 'has no tests')
  1187.     
  1188.     tests.sort()
  1189.     suite = unittest.TestSuite()
  1190.     for test in tests:
  1191.         if len(test.examples) == 0:
  1192.             continue
  1193.         
  1194.         if not test.filename:
  1195.             filename = module.__file__
  1196.             if filename[-4:] in ('.pyc', '.pyo'):
  1197.                 filename = filename[:-1]
  1198.             
  1199.             test.filename = filename
  1200.         
  1201.         suite.addTest(DocTestCase(test, **options))
  1202.     
  1203.     return suite
  1204.  
  1205.  
  1206. class DocFileCase(DocTestCase):
  1207.     
  1208.     def id(self):
  1209.         return '_'.join(self._dt_test.name.split('.'))
  1210.  
  1211.     
  1212.     def __repr__(self):
  1213.         return self._dt_test.filename
  1214.  
  1215.     __str__ = __repr__
  1216.     
  1217.     def format_failure(self, err):
  1218.         return 'Failed doctest test for %s\n  File "%s", line 0\n\n%s' % (self._dt_test.name, self._dt_test.filename, err)
  1219.  
  1220.  
  1221.  
  1222. def DocFileTest(path, module_relative = True, package = None, globs = None, parser = DocTestParser(), **options):
  1223.     if globs is None:
  1224.         globs = { }
  1225.     
  1226.     if package and not module_relative:
  1227.         raise ValueError('Package may only be specified for module-relative paths.')
  1228.     
  1229.     if module_relative:
  1230.         package = _normalize_module(package)
  1231.         path = _module_relative_path(package, path)
  1232.     
  1233.     name = os.path.basename(path)
  1234.     doc = open(path).read()
  1235.     test = parser.get_doctest(doc, globs, name, path, 0)
  1236.     return DocFileCase(test, **options)
  1237.  
  1238.  
  1239. def DocFileSuite(*paths, **kw):
  1240.     suite = unittest.TestSuite()
  1241.     if kw.get('module_relative', True):
  1242.         kw['package'] = _normalize_module(kw.get('package'))
  1243.     
  1244.     for path in paths:
  1245.         suite.addTest(DocFileTest(path, **kw))
  1246.     
  1247.     return suite
  1248.  
  1249.  
  1250. def script_from_examples(s):
  1251.     output = []
  1252.     for piece in DocTestParser().parse(s):
  1253.         if isinstance(piece, Example):
  1254.             output.append(piece.source[:-1])
  1255.             want = piece.want
  1256.             if want:
  1257.                 output.append('# Expected:')
  1258.                 [] += [ '## ' + l for l in want.split('\n')[:-1] ]
  1259.             
  1260.         want
  1261.         [] += [ _comment_line(l) for l in piece.split('\n')[:-1] ]
  1262.     
  1263.     while output and output[-1] == '#':
  1264.         output.pop()
  1265.         continue
  1266.         []
  1267.     while output and output[0] == '#':
  1268.         output.pop(0)
  1269.         continue
  1270.         output
  1271.     return '\n'.join(output)
  1272.  
  1273.  
  1274. def testsource(module, name):
  1275.     module = _normalize_module(module)
  1276.     tests = DocTestFinder().find(module)
  1277.     test = _[1]
  1278.     test = test[0]
  1279.     testsrc = script_from_examples(test.docstring)
  1280.     return testsrc
  1281.  
  1282.  
  1283. def debug_src(src, pm = False, globs = None):
  1284.     testsrc = script_from_examples(src)
  1285.     debug_script(testsrc, pm, globs)
  1286.  
  1287.  
  1288. def debug_script(src, pm = False, globs = None):
  1289.     import pdb
  1290.     srcfilename = tempfile.mktemp('.py', 'doctestdebug')
  1291.     f = open(srcfilename, 'w')
  1292.     f.write(src)
  1293.     f.close()
  1294.     
  1295.     try:
  1296.         if globs:
  1297.             globs = globs.copy()
  1298.         else:
  1299.             globs = { }
  1300.         if pm:
  1301.             
  1302.             try:
  1303.                 execfile(srcfilename, globs, globs)
  1304.             print sys.exc_info()[1]
  1305.             pdb.post_mortem(sys.exc_info()[2])
  1306.  
  1307.         else:
  1308.             pdb.run('execfile(%r)' % srcfilename, globs, globs)
  1309.     finally:
  1310.         os.remove(srcfilename)
  1311.  
  1312.  
  1313.  
  1314. def debug(module, name, pm = False):
  1315.     module = _normalize_module(module)
  1316.     testsrc = testsource(module, name)
  1317.     debug_script(testsrc, pm, module.__dict__)
  1318.  
  1319.  
  1320. class _TestClass:
  1321.     
  1322.     def __init__(self, val):
  1323.         self.val = val
  1324.  
  1325.     
  1326.     def square(self):
  1327.         self.val = self.val ** 2
  1328.         return self
  1329.  
  1330.     
  1331.     def get(self):
  1332.         return self.val
  1333.  
  1334.  
  1335. __test__ = {
  1336.     '_TestClass': _TestClass,
  1337.     'string': '\n                      Example of a string object, searched as-is.\n                      >>> x = 1; y = 2\n                      >>> x + y, x * y\n                      (3, 2)\n                      ',
  1338.     'bool-int equivalence': '\n                                    In 2.2, boolean expressions displayed\n                                    0 or 1.  By default, we still accept\n                                    them.  This can be disabled by passing\n                                    DONT_ACCEPT_TRUE_FOR_1 to the new\n                                    optionflags argument.\n                                    >>> 4 == 4\n                                    1\n                                    >>> 4 == 4\n                                    True\n                                    >>> 4 > 4\n                                    0\n                                    >>> 4 > 4\n                                    False\n                                    ',
  1339.     'blank lines': "\n                Blank lines can be marked with <BLANKLINE>:\n                    >>> print 'foo\\n\\nbar\\n'\n                    foo\n                    <BLANKLINE>\n                    bar\n                    <BLANKLINE>\n            ",
  1340.     'ellipsis': "\n                If the ellipsis flag is used, then '...' can be used to\n                elide substrings in the desired output:\n                    >>> print range(1000) #doctest: +ELLIPSIS\n                    [0, 1, 2, ..., 999]\n            ",
  1341.     'whitespace normalization': '\n                If the whitespace normalization flag is used, then\n                differences in whitespace are ignored.\n                    >>> print range(30) #doctest: +NORMALIZE_WHITESPACE\n                    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n                     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n                     27, 28, 29]\n            ' }
  1342.  
  1343. def _test():
  1344.     r = unittest.TextTestRunner()
  1345.     r.run(DocTestSuite())
  1346.  
  1347. if __name__ == '__main__':
  1348.     _test()
  1349.  
  1350.